Shift arthmetric
Logic shift
Logic shift(논리 쉬프트)에서 새롭게 나오는 비트는 언제나 0이다.
데이터로부터 쉬프트된 마지막 비트는 캐리 플래그에 저장된다.
mov ax,0C123H
shl ax,1
shr ax,1
shr ax,1
mov ax,0c123H
shl ax,2
mov cl,3
shr ax,cl
unsigned shift에서만 logic shift를 통하여서 곱하기/나누기(2) 연산을 할 수 있다.
Arithmetic shift
SAL과 SAR 명령어로 이루어져 있다.
SAL은 SHL과 정확히 같은 기계어 코드이다.
SAR은 피연산자의 부호비트를 쉬프트 하지 않는다. 부호비트는 쉬프트되기 전 부호비트와 같다.
mov ax,0C123H
sal ax,1
sal ax,1
sar ax,2
Rotation shift
Rotation shift(회전 쉬프트)는 기본적으로 논리 쉬프트처럼 작동하지만,
쉬프트를 통해 사라진 끝 데이터가 새롭게 추가되는 데이터와 같다.
ROL, ROR이 있다.
마지막으로 쉬프트된 비트는 캐리 플리그에 저장된다.
mov ax,0C123H
rol ax,1
rol ax,1
rol ax,1
ror ax,2
ror ax,1
데이터의 비트와 캐리 플래그의 값을 함께 회전 시키는 명령어,
RCL, RCR도 있다.
mov ax,0C123H
clc
rcl ax,1
rcl ax,1
rcl ax,1
rcr ax,2
rcr ax,1
Bit_Counter
EAX 레지스터에 켜져있는 비트의 숫자를 세는 소스(BL 레지스터에 저장)
mov bl,0
mov ecx,32
count_loop:
rol eax,1
jnc skip_inc
inc bl
skip_inc:
loop count_loop